package com.zp.system.service;

import cn.hutool.core.lang.tree.Tree;
import com.zp.common.myBatis.core.page.PageQuery;
import com.zp.common.myBatis.core.page.TableDataInfo;
import com.zp.system.api.entity.SysOrg;
import com.zp.system.entity.bo.SysOrgBo;
import com.zp.system.entity.vo.SysOrgVo;

import java.util.Collection;
import java.util.List;

/**
 * 机构Service接口
 *
 * @author zhang peng
 * @date 2022-12-16
 */
public interface ISysOrgService {

    /**
     * 查询机构
     */
    SysOrgVo queryById (String orgId);

    /**
     * 查询机构列表(分页)
     */
    TableDataInfo<SysOrgVo> queryPageList (SysOrgBo bo, PageQuery pageQuery);

    /**
     * 查询机构列表(不分页)
     */
    List<SysOrg> queryList (SysOrg sysOrg);

    /**
     * 修改机构
     */
    Boolean insertByBo (SysOrgBo bo);

    /**
     * 修改机构
     */
    Boolean updateByBo (SysOrgBo bo);

    /**
     * 校验并批量删除机构信息
     */
    Boolean deleteWithValidByIds (Collection<String> ids, Boolean isValid);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param sysOrgList 机构列表
     * @return 下拉树结构列表
     */
    List<Tree<String>> buildOrgTreeSelect (List<SysOrg> sysOrgList);

    /**
     * 修改机构状态
     *
     * @param sysOrg 机构信息
     * @return 结果
     */
    int updateOrgStatus (SysOrg sysOrg);

    /**
     * 校验机构名称是否唯一
     *
     * @param bo 机构信息
     * @return 结果
     */
    String checkOrgNameUnique (SysOrgBo bo);

    /**
     * 校验机构代码是否唯一
     *
     * @param bo 机构信息
     * @return 结果
     */
    String checkOrgCodeUnique (SysOrgBo bo);
}
